﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using AtlasPlantasMedicinales.Models;
using MySql.Data.MySqlClient;
using System.Web.Helpers;
using System.Security.Cryptography;

namespace AtlasPlantasMedicinales.Controllers
{
    public class UsuarioController : Controller
    {
        private MySqlConnection connection;
        private string server;
        private string database;
        private string uid;
        private string password;

        //
        // GET: /Usuario/

        public ActionResult Index()
        {
            ViewBag.autenticado = TempData["IS"];
            TempData["IS"] = ViewBag.autenticado;
            ViewBag.categoria = TempData["Categoria"];
            TempData["Categoria"] = ViewBag.categoria;
            ViewBag.NombreUsuario = TempData["NombreUsuario"];
            TempData["NombreUsuario"] = ViewBag.NombreUsuario;
            ViewBag.Usuario_objeto = TempData["Usuario_objeto"];
            TempData["Usuario_objeto"] = ViewBag.Usuario_objeto;
            return View();
        }
    
        public ActionResult DatosDePerfil()
        {

            ViewBag.autenticado = TempData["IS"];
            TempData["IS"] = ViewBag.autenticado;
            ViewBag.categoria = TempData["Categoria"];
            TempData["Categoria"] = ViewBag.categoria;
            ViewBag.NombreUsuario = TempData["NombreUsuario"];
            TempData["NombreUsuario"] = ViewBag.NombreUsuario;
            ViewBag.Usuario_objeto = TempData["Usuario_objeto"];
            TempData["Usuario_objeto"] = ViewBag.Usuario_objeto;

            string name = ViewBag.NombreUsuario;
            Usuario user = new Usuario();

            server = "localhost";
            database = "atlas_de_plantas_medicinales";
            uid = "root";
            password = "123456";
            string connectionString;
            connectionString = "SERVER=" + server + ";" + "DATABASE=" +
            database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
            connection = new MySqlConnection(connectionString);
            connection.Open();
            String query = "SELECT * FROM Usuarios WHERE Usuario='" + name + "'";
            MySqlCommand comando = new MySqlCommand(query, connection);
            MySqlDataReader dataReader = comando.ExecuteReader();
            String nombre = "", carrera = "", institucion = "", usuario = "", contrasena = "", correo = "", observaciones = "";
            int categoria = 0, id = 0;
            bool habilitado = true;
            while (dataReader.Read())
            {
                id = (int)dataReader["ID"];
                nombre = (String)dataReader["Nombre"];
                carrera = (String)dataReader["Carrera"];
                institucion = (String)dataReader["Institucion"];
                usuario = (String)dataReader["Usuario"];
                contrasena = (String)dataReader["Contrasena"];
                correo = (String)dataReader["Correo"];
                categoria = (int)dataReader["Categoria"];
                habilitado = (bool)dataReader["Habilitado"];
                observaciones = (String)dataReader["Observaciones"];
            }
            connection.Close();
            IEnumerable<ActionType> actionTypes = Enum.GetValues(typeof(ActionType)).Cast<ActionType>();
            user.ActionList = from action in actionTypes
                              select new SelectListItem
                              {
                                  Text = action.ToString(),
                                  Value = ((int)action).ToString()
                              };
            IEnumerable<Habilitado> estadoTypes = Enum.GetValues(typeof(Habilitado)).Cast<Habilitado>();
            user.ListaHabilitado = from action in estadoTypes
                                   select new SelectListItem
                                   {
                                       Text = action.ToString(),
                                       Value = ((int)action).ToString()
                                   };
            user.ID = id;
            user.Nombre = nombre;
            user.Carrera = carrera;
            user.Institucion = institucion;
            user.usuario = usuario;
            user.contrasena = contrasena;
            user.correo = correo;
            user.id_cat = categoria;
            user.observaciones = observaciones;
            if (habilitado)
                user.id_hab = 1;
            else
                user.id_hab = 0;

            return View(user);
        }
        public ActionResult NuevaContrasena()
        {
            ViewBag.autenticado = TempData["IS"];
            TempData["IS"] = ViewBag.autenticado;
            ViewBag.categoria = TempData["Categoria"];
            TempData["Categoria"] = ViewBag.categoria;
            ViewBag.NombreUsuario = TempData["NombreUsuario"];
            TempData["NombreUsuario"] = ViewBag.NombreUsuario;
            ViewBag.Usuario_objeto = TempData["Usuario_objeto"];
            TempData["Usuario_objeto"] = ViewBag.Usuario_objeto;


            return View();
        }

        public ActionResult Cambio(Contrasena con)
        {
            ViewBag.autenticado = TempData["IS"];
            TempData["IS"] = ViewBag.autenticado;
            ViewBag.categoria = TempData["Categoria"];
            TempData["Categoria"] = ViewBag.categoria;
            ViewBag.NombreUsuario = TempData["NombreUsuario"];
            TempData["NombreUsuario"] = ViewBag.NombreUsuario;
            ViewBag.Usuario_objeto = TempData["Usuario_objeto"];
            TempData["Usuario_objeto"] = ViewBag.Usuario_objeto;

            string name = ViewBag.NombreUsuario;
            Usuario user = new Usuario();

            server = "localhost";
            database = "atlas_de_plantas_medicinales";
            uid = "root";
            password = "123456";
            string connectionString;
            connectionString = "SERVER=" + server + ";" + "DATABASE=" +
            database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
            connection = new MySqlConnection(connectionString);
            connection.Open();
            String query = "SELECT * FROM Usuarios WHERE Usuario='" + name + "'";
            MySqlCommand comando = new MySqlCommand(query, connection);
            MySqlDataReader dataReader = comando.ExecuteReader();
            String nombre = "", carrera = "", institucion = "", usuario = "", contrasena = "", correo = "", observaciones = "";
            int categoria = 0, id = 0;
            bool habilitado = true;
            while (dataReader.Read())
            {
                id = (int)dataReader["ID"];
                nombre = (String)dataReader["Nombre"];
                carrera = (String)dataReader["Carrera"];
                institucion = (String)dataReader["Institucion"];
                usuario = (String)dataReader["Usuario"];
                contrasena = (String)dataReader["Contrasena"];
                correo = (String)dataReader["Correo"];
                categoria = (int)dataReader["Categoria"];
                habilitado = (bool)dataReader["Habilitado"];
                observaciones = (String)dataReader["Observaciones"];
            }
            connection.Close();
            IEnumerable<ActionType> actionTypes = Enum.GetValues(typeof(ActionType)).Cast<ActionType>();
            user.ActionList = from action in actionTypes
                              select new SelectListItem
                              {
                                  Text = action.ToString(),
                                  Value = ((int)action).ToString()
                              };
            IEnumerable<Habilitado> estadoTypes = Enum.GetValues(typeof(Habilitado)).Cast<Habilitado>();
            user.ListaHabilitado = from action in estadoTypes
                                   select new SelectListItem
                                   {
                                       Text = action.ToString(),
                                       Value = ((int)action).ToString()
                                   };
            user.ID = id;
            user.Nombre = nombre;
            user.Carrera = carrera;
            user.Institucion = institucion;
            user.usuario = usuario;
            user.contrasena = contrasena;
            user.correo = correo;
            user.id_cat = categoria;
            user.observaciones = observaciones;
            if (habilitado)
                user.id_hab = 1;
            else
                user.id_hab = 0;



            if(con.contNueva != con.contNueva2){
                ModelState.AddModelError("", "Las contraseña nueva no es la misma en ambas casillas.");
                return View("NuevaContrasena");
            }
            else if (ComputeHash(con.contAnt) == user.contrasena)
            {

                server = "localhost";
                database = "atlas_de_plantas_medicinales";
                uid = "root";
                password = "123456";
                connectionString = "SERVER=" + server + ";" + "DATABASE=" +
                database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";

                query = "";
                connection = new MySqlConnection(connectionString);
                connection.Open();

                query = "UPDATE Usuarios SET ";
                query += "Contrasena='" + ComputeHash(con.contNueva) + "'";
                query += " WHERE ID='" + user.ID + "'";

                comando = new MySqlCommand(query, connection);
                comando.ExecuteNonQuery();


                return RedirectToAction("Index","Home");
            }
            else
            {
                ModelState.AddModelError("", "La contraseña anterior no es la misma.");
                return View("NuevaContrasena");
            }

            return View();
        }
        public ActionResult Formulario()
        {
            Usuario model = new Usuario();
            IEnumerable<ActionType> actionTypes = Enum.GetValues(typeof(ActionType)).Cast<ActionType>();
            model.ActionList = from action in actionTypes
                               select new SelectListItem
                               {
                                   Text = action.ToString(),
                                   Value = ((int)action).ToString()
                               };
            IEnumerable<Habilitado> estadoTypes = Enum.GetValues(typeof(Habilitado)).Cast<Habilitado>();
            model.ListaHabilitado = from action in estadoTypes
                                    select new SelectListItem
                                    {
                                        Text = action.ToString(),
                                        Value = ((int)action).ToString()
                                    };
            ViewData["tipo"] = TempData["tipo"];
            ViewBag.autenticado = TempData["IS"];
            TempData["IS"] = ViewBag.autenticado;
            ViewBag.categoria = TempData["Categoria"];
            TempData["Categoria"] = ViewBag.categoria;
            ViewBag.NombreUsuario = TempData["NombreUsuario"];
            TempData["NombreUsuario"] = ViewBag.NombreUsuario;
            ViewBag.Usuario_objeto = TempData["Usuario_objeto"];
            TempData["Usuario_objeto"] = ViewBag.Usuario_objeto;
            return View(model);
        }

        public ActionResult Administracion()
        {
            ViewBag.autenticado = TempData["IS"];
            TempData["IS"] = ViewBag.autenticado;
            ViewBag.categoria = TempData["Categoria"];
            TempData["Categoria"] = ViewBag.categoria;
            ViewBag.NombreUsuario = TempData["NombreUsuario"];
            ViewBag.NombreUsuario = TempData["NombreUsuario"];
            TempData["NombreUsuario"] = ViewBag.NombreUsuario;
            ViewBag.Usuario_objeto = TempData["Usuario_objeto"];
            TempData["Usuario_objeto"] = ViewBag.Usuario_objeto;
            return View();
        }

        [HttpPost]
        public ActionResult Administracion(Usuario user)
        {
            ViewBag.autenticado = TempData["IS"];
            TempData["IS"] = ViewBag.autenticado;
            ViewBag.categoria = TempData["Categoria"];
            TempData["Categoria"] = ViewBag.categoria;
            ViewBag.NombreUsuario = TempData["NombreUsuario"];
            TempData["NombreUsuario"] = ViewBag.NombreUsuario;
            ViewBag.Usuario_objeto = TempData["Usuario_objeto"];
            TempData["Usuario_objeto"] = ViewBag.Usuario_objeto;
            if (ModelState.IsValid)
            {
                return RedirectToAction("Administracion");
            }
            ModelState.AddModelError("", "Verifique que haya ingresado correctamente los datos");
            return View();
        }


        public ActionResult CrearUsuario()
        {
            if (ModelState.IsValid)
            {
                TempData["tipo"] = true;
                return RedirectToAction("Formulario", "Usuario");
            }

            return View("Administracion");
        }

        [HttpPost]
        public ActionResult FormularioEditar(Usuario user)
        {
            ViewBag.autenticado = TempData["IS"];
            TempData["IS"] = ViewBag.autenticado;
            ViewBag.categoria = TempData["Categoria"];
            TempData["Categoria"] = ViewBag.categoria;
            ViewBag.NombreUsuario = TempData["NombreUsuario"];
            TempData["NombreUsuario"] = ViewBag.NombreUsuario;
            ViewBag.Usuario_objeto = TempData["Usuario_objeto"];
            TempData["Usuario_objeto"] = ViewBag.Usuario_objeto;
            server = "localhost";
            database = "atlas_de_plantas_medicinales";
            uid = "root";
            password = "123456";
            string connectionString;
            connectionString = "SERVER=" + server + ";" + "DATABASE=" +
            database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
            connection = new MySqlConnection(connectionString);
            connection.Open();
            String query = "SELECT * FROM Usuarios WHERE Usuario='" + user.usuario + "'";
            MySqlCommand comando = new MySqlCommand(query, connection);
            MySqlDataReader dataReader = comando.ExecuteReader();
            String nombre = "", carrera = "", institucion = "", usuario = "", contrasena = "", correo = "", observaciones = "";
            int categoria = 0, id = 0;
            bool habilitado = true;
            while (dataReader.Read())
            {
                id = (int)dataReader["ID"];
                nombre = (String)dataReader["Nombre"];
                carrera = (String)dataReader["Carrera"];
                institucion = (String)dataReader["Institucion"];
                usuario = (String)dataReader["Usuario"];
                contrasena = (String)dataReader["Contrasena"];
                correo = (String)dataReader["Correo"];
                categoria = (int)dataReader["Categoria"];
                habilitado = (bool)dataReader["Habilitado"];
                observaciones = (String)dataReader["Observaciones"];
            }
            connection.Close();
            IEnumerable<ActionType> actionTypes = Enum.GetValues(typeof(ActionType)).Cast<ActionType>();
            user.ActionList = from action in actionTypes
                               select new SelectListItem
                               {
                                   Text = action.ToString(),
                                   Value = ((int)action).ToString()
                               };
            IEnumerable<Habilitado> estadoTypes = Enum.GetValues(typeof(Habilitado)).Cast<Habilitado>();
            user.ListaHabilitado = from action in estadoTypes
                                    select new SelectListItem
                                    {
                                        Text = action.ToString(),
                                        Value = ((int)action).ToString()
                                    };
            user.ID = id;
            user.Nombre = nombre;
            user.Carrera = carrera;
            user.Institucion = institucion;
            user.usuario = usuario;
            user.contrasena = contrasena;
            user.correo = correo;
            user.id_cat = categoria;
            user.observaciones = observaciones;
            if (habilitado)
                user.id_hab = 1;
            else
                user.id_hab = 0;
            return View(user);
        }
        public static String ComputeHash(string textToHash)
        {
            SHA1CryptoServiceProvider SHA1 = new SHA1CryptoServiceProvider();
            byte[] byteValue = System.Text.Encoding.UTF8.GetBytes(textToHash);
            byte[] byteHash = SHA1.ComputeHash(byteValue);
            SHA1.Clear();
            return Convert.ToBase64String(byteHash);
        }

        [HttpPost]
        public ActionResult Formulario(Usuario nuevoUsuario)
        {
            ViewBag.autenticado = TempData["IS"];
            TempData["IS"] = ViewBag.autenticado;
            ViewBag.categoria = TempData["Categoria"];
            TempData["Categoria"] = ViewBag.categoria;
            ViewBag.NombreUsuario = TempData["NombreUsuario"];
            TempData["NombreUsuario"] = ViewBag.NombreUsuario;
            ViewBag.Usuario_objeto = TempData["Usuario_objeto"];
            TempData["Usuario_objeto"] = ViewBag.Usuario_objeto;
            if (ModelState.IsValid)
            {

                server = "localhost";
                database = "atlas_de_plantas_medicinales";
                uid = "root";
                password = "123456";
                string connectionString;
                connectionString = "SERVER=" + server + ";" + "DATABASE=" +
                database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
                connection = new MySqlConnection(connectionString);
                connection.Open();
                String query = "SELECT * FROM Usuarios WHERE Usuario='" + nuevoUsuario.usuario + "'";
                MySqlCommand comando = new MySqlCommand(query, connection);
                MySqlDataReader dataReader = comando.ExecuteReader();
                String id = "", contrasena = "";
                while (dataReader.Read())
                {
                    id = (String)dataReader["Usuario"];
                }
                connection.Close();
                connection = new MySqlConnection(connectionString);
                connection.Open();
                if (id.Equals("") && contrasena.Equals(""))
                {
                    query = "INSERT INTO Usuarios (Nombre, Carrera, Institucion, Categoria, Usuario, Contrasena, Correo, Habilitado, Observaciones) VALUES ('" + nuevoUsuario.Nombre + "','" + nuevoUsuario.Carrera + "','" + nuevoUsuario.Institucion + "','" + nuevoUsuario.id_cat + "','" + nuevoUsuario.usuario + "','" + ComputeHash(nuevoUsuario.contrasena) + "','" + nuevoUsuario.correo + "','" + nuevoUsuario.id_hab + "','" + nuevoUsuario.observaciones + "')";
                    MySqlCommand insert = new MySqlCommand(query, connection);
                    insert.ExecuteNonQuery();
                    ModelState.AddModelError("", "Se ha agregado el usuario con éxito.");
                }
                else
                {
                    ModelState.AddModelError("", "El nombre de usuario ya existe. Ingrese otro nombre.");
                    return View(nuevoUsuario);
                }
                connection.Close();
                return View("Administracion");
            }
            else
            {
                ViewData["tipo"] = true;
                Usuario model = new Usuario();
                IEnumerable<ActionType> actionTypes = Enum.GetValues(typeof(ActionType)).Cast<ActionType>();
                model.ActionList = from action in actionTypes
                                   select new SelectListItem
                                   {
                                       Text = action.ToString(),
                                       Value = ((int)action).ToString()
                                   };
                IEnumerable<Habilitado> estadoTypes = Enum.GetValues(typeof(Habilitado)).Cast<Habilitado>();
                model.ListaHabilitado = from action in estadoTypes
                                        select new SelectListItem
                                        {
                                            Text = action.ToString(),
                                            Value = ((int)action).ToString()
                                        };
                nuevoUsuario.ActionList = model.ActionList;
                nuevoUsuario.ListaHabilitado = model.ListaHabilitado;
                ModelState.AddModelError("", "Los datos ingresados son incorrectos.");
                return View(nuevoUsuario);
            }
        }


        [HttpPost]
        public ActionResult guardarCambios(Usuario user)
        {
            ViewBag.autenticado = TempData["IS"];
            TempData["IS"] = ViewBag.autenticado;
            ViewBag.categoria = TempData["Categoria"];
            TempData["Categoria"] = ViewBag.categoria;
            ViewBag.NombreUsuario = TempData["NombreUsuario"];
            TempData["NombreUsuario"] = ViewBag.NombreUsuario;
            ViewBag.Usuario_objeto = TempData["Usuario_objeto"];
            TempData["Usuario_objeto"] = ViewBag.Usuario_objeto;
            if (ModelState.IsValid)
            {
                String server = "localhost";
                String database = "atlas_de_plantas_medicinales";
                String uid = "root";
                String password = "123456";
                string connectionString;
                connectionString = "SERVER=" + server + ";" + "DATABASE=" +
                database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";

                String query = "";
                connection = new MySqlConnection(connectionString);
                connection.Open();

                query = "UPDATE Usuarios SET ";
                query += "Nombre='" + user.Nombre + "', ";
                query += "Carrera='" + user.Carrera + "', ";
                query += "Institucion='" + user.Institucion + "', ";
                query += "Categoria='" + user.id_cat + "', ";
                query += "Usuario='" + user.usuario + "', ";
                query += "Contrasena='" + ComputeHash(user.contrasena) + "', ";
                query += "Correo='" + user.correo + "', ";
                query += "Habilitado='" + user.id_hab + "', ";
                query += "Observaciones='" + user.observaciones+ "'";
                query += " WHERE ID='" + user.ID + "'";

                MySqlCommand comando = new MySqlCommand(query, connection);
                comando.ExecuteNonQuery();

                return RedirectToAction("Administracion");
            }
            IEnumerable<ActionType> actionTypes = Enum.GetValues(typeof(ActionType)).Cast<ActionType>();
            user.ActionList = from action in actionTypes
                              select new SelectListItem
                              {
                                  Text = action.ToString(),
                                  Value = ((int)action).ToString()
                              };
            IEnumerable<Habilitado> estadoTypes = Enum.GetValues(typeof(Habilitado)).Cast<Habilitado>();
            user.ListaHabilitado = from action in estadoTypes
                                   select new SelectListItem
                                   {
                                       Text = action.ToString(),
                                       Value = ((int)action).ToString()
                                   };
            return View("FormularioEditar", user);
        }

        [HttpPost]
        public ActionResult guardarCambios2(Usuario user)
        {
            ViewBag.autenticado = TempData["IS"];
            TempData["IS"] = ViewBag.autenticado;
            ViewBag.categoria = TempData["Categoria"];
            TempData["Categoria"] = ViewBag.categoria;
            ViewBag.NombreUsuario = TempData["NombreUsuario"];
            TempData["NombreUsuario"] = ViewBag.NombreUsuario;
            ViewBag.Usuario_objeto = TempData["Usuario_objeto"];
            TempData["Usuario_objeto"] = ViewBag.Usuario_objeto;

            if (ModelState.IsValid)
            {
                String server = "localhost";
                String database = "atlas_de_plantas_medicinales";
                String uid = "root";
                String password = "123456";
                string connectionString;
                connectionString = "SERVER=" + server + ";" + "DATABASE=" +
                database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";

                String query = "";
                connection = new MySqlConnection(connectionString);
                connection.Open();

                query = "UPDATE Usuarios SET ";
                query += "Nombre='" + user.Nombre + "', ";
                query += "Carrera='" + user.Carrera + "', ";
                query += "Institucion='" + user.Institucion + "', ";
                query += "Usuario='" + user.usuario + "', ";
                query += "Correo='" + user.correo + "'";
                query += " WHERE ID='" + user.ID + "'";

                MySqlCommand comando = new MySqlCommand(query, connection);
                comando.ExecuteNonQuery();

                return RedirectToAction("DatosDePerfil");
            }
            IEnumerable<ActionType> actionTypes = Enum.GetValues(typeof(ActionType)).Cast<ActionType>();
            user.ActionList = from action in actionTypes
                              select new SelectListItem
                              {
                                  Text = action.ToString(),
                                  Value = ((int)action).ToString()
                              };
            IEnumerable<Habilitado> estadoTypes = Enum.GetValues(typeof(Habilitado)).Cast<Habilitado>();
            user.ListaHabilitado = from action in estadoTypes
                                   select new SelectListItem
                                   {
                                       Text = action.ToString(),
                                       Value = ((int)action).ToString()
                                   };
            return View("DatosDePerfil", user);
        }

        [HttpPost]
        public ActionResult Admin(BuscarModel Model)
        {
            ViewBag.autenticado = TempData["IS"];
            TempData["IS"] = ViewBag.autenticado;
            ViewBag.categoria = TempData["Categoria"];
            TempData["Categoria"] = ViewBag.categoria;
            ViewBag.NombreUsuario = TempData["NombreUsuario"];
            TempData["NombreUsuario"] = ViewBag.NombreUsuario;
            ViewBag.Usuario_objeto = TempData["Usuario_objeto"];
            TempData["Usuario_objeto"] = ViewBag.Usuario_objeto;
            
            if (ModelState.IsValid)
            {
                server = "localhost";
                database = "atlas_de_plantas_medicinales";
                uid = "root";
                password = "123456";
                string connectionString;
                connectionString = "SERVER=" + server + ";" + "DATABASE=" +
                database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
                String query = "";

                connection = new MySqlConnection(connectionString);
                connection.Open();
                if (Model.porCarrera || Model.porCategoria || Model.porCorreo || Model.porInstitucion || Model.porNombre || Model.porUsuario)
                {
                    query += "SELECT * FROM usuarios WHERE ";
                    bool flag = false;
                    if (Model.porNombre)
                    {
                        query += "Nombre LIKE '%" + Model.porBuscar + "%' ";
                        flag = true;
                    }
                    if (Model.porCarrera)
                    {
                        if (flag == true)
                        {
                            query += "OR Carrera LIKE '%" + Model.porBuscar + "%' ";
                        }
                        else
                        {
                            query += "Carrera LIKE '%" + Model.porBuscar + "%' ";
                            flag = true;
                        }

                    }
                    if (Model.porInstitucion)
                    {
                        if (flag == true)
                        {
                            query += "OR Institucion LIKE '%" + Model.porBuscar + "%' ";
                        }
                        else
                        {
                            query += "Institucion LIKE '%" + Model.porBuscar + "%' ";
                            flag = true;
                        }

                    }
                    if (Model.porCategoria)
                    {
                        if (flag == true)
                        {
                            query += "OR Categoria LIKE '%" + Model.porBuscar + "%' ";
                        }
                        else
                        {
                            query += "Categoria LIKE '%" + Model.porBuscar + "%' ";
                            flag = true;
                        }

                    }
                    if (Model.porUsuario)
                    {
                        if (flag == true)
                        {
                            query += "OR Usuario LIKE '%" + Model.porBuscar + "%' ";
                        }
                        else
                        {
                            query += "Usuario LIKE '%" + Model.porBuscar + "%' ";
                            flag = true;
                        }

                    }
                    if (Model.porCorreo)
                    {
                        if (flag == true)
                        {
                            query += "OR Correo LIKE '%" + Model.porBuscar + "%' ";
                        }
                        else
                        {
                            query += "Correo LIKE '%" + Model.porBuscar + "%' ";
                            flag = true;
                        }

                    }
                }
                else
                {
                    query = "SELECT * FROM Usuarios";
                }
                
                MySqlCommand comando = new MySqlCommand(query, connection);
                MySqlDataReader dataReader = comando.ExecuteReader();
                List<int> habilitado = new List<int>();
                List<AtlasPlantasMedicinales.Models.Usuario> listaDeUsuarios = new List<AtlasPlantasMedicinales.Models.Usuario>();
                while (dataReader.Read())
                {
                    AtlasPlantasMedicinales.Models.Usuario UserTemp = new AtlasPlantasMedicinales.Models.Usuario();

                    UserTemp.ID = (int)dataReader["ID"];
                    UserTemp.Nombre = (String)dataReader["nombre"];
                    UserTemp.Carrera = (String)dataReader["carrera"];
                    UserTemp.Institucion = (String)dataReader["institucion"];
                    UserTemp.id_cat = (int)dataReader["Categoria"];
                    UserTemp.usuario = (String)dataReader["usuario"];
                    UserTemp.contrasena = (String)dataReader["contrasena"];
                    UserTemp.correo = (String)dataReader["correo"];
                    

                    if ((bool)dataReader["Habilitado"])
                    {
                        UserTemp.id_hab = 1;
                    }
                    else
                    {
                        UserTemp.id_hab = 0;
                    }


                    listaDeUsuarios.Add(UserTemp);
                }
                ViewData["datos"] = listaDeUsuarios;
                ViewBag.busqueda = true;
                return View("Administracion");
            }

            return View("Administracion");
        }
    }
}